package scau.cn.component.util;

import java.io.File;
import java.util.ArrayList;

import scau.cn.component.abstracts.Disk;
import scau.cn.component.domain.Catalog;
import scau.cn.component.domain.FileN;
import scau.cn.fat.FAT;

/**
 * 
 * @author 严浩强
 */
public class CatalogOp {
	
	
	//----------------------------------方法---------------------------------
	/**
	 * 建立目录：
	 * 		在当前目录下建立目录
	 * @param catalogName: 目录名字
	 * @param attribute: 目录的属性
	 * @param parent: 父目录
	 * @return catalog： 建立的新目录  null: 目录已经存在
	 * @throws Exception
	 * @author 严浩强
	 */
	public Catalog createCatalog(String catalogName, byte attribute, Catalog parent) throws Exception {
		if(!parent.findFileName(catalogName)) {
			//不需要fat.findFree，Catalog的构造方法已经有了
			Catalog catalog = new Catalog(catalogName, ".c", attribute, parent.getFat(), parent);
			File file = new File(catalog.findPath());
			if(!file.exists()) {
				file.mkdir();
			}
			parent.addComponent(catalog);
			return catalog;
		}
		return null;
	}
	
	/**
	 * 显示该目录的内容：
	 * 			  	我们应该返回一组对象，而不是返回名字
	 * @param catalogName: 目录名字
	 * @param parent: 父目录
	 * @return ArrayList<Disk>： 该目录的集合
	 * @throws Exception
	 * @author 严浩强
	 */
	public ArrayList<Disk> showCatalog(String catalogName, Catalog parent) throws Exception {
		if(!parent.findFileName(catalogName)) {
			return parent.getCatalogFromComponent(catalogName).getComponent();
		}
		return null;
	}
	
	/**
	 * 删除当前目录
	 * 			
	 * @param catalog
	 * @author 严浩强
	 */
	public void deleteCatalog(Catalog catalog) {
		catalog.delete();
	}
	
	/**
	 * 进入某一目录
	 * @param catalogName:目录名字
	 * @param parent：父目录
	 * @return Catalog
	 * @author 严浩强
	 */
	public Catalog enterCatalog(String catalogName, Catalog parent) {
		if(!parent.findFileName(catalogName)) {
			return parent.getCatalogFromComponent(catalogName);
		}
		return null;
	}
	
	/**
	 * 退出该目录到其父目录
	 * @param catalogName:当前目录名字
	 * @return Catalog
	 * @author 严浩强
	 */
	public Catalog outCatalog(Catalog catalog) {
		return (Catalog) catalog.getParent();
	}
}
